#include <iostream>
#include <new>
#include "horarios.h"

using namespace std;

/*
*	Constroi a matriz de dias x horarios
*/
Horarios::Horarios () {
	int i, j;

	numDias= 6;
	numHoras= 38;

	// Cria a matriz com um vetor de ponteiros para inteiros por dia
	m = (int**) calloc(numDias, sizeof(int*));
	if(m== NULL) {
		cout << "Error: memory could not be allocated" << endl;
	}else{

		// Cria a matriz com um vetor de inteiros para cada hora do dia
		for(i=0; i<numDias; i++){
			m[i] = (int*) calloc(numHoras, sizeof(int));
			if(m[i] == NULL) {
				cout << "Error: memory could not be allocated" << endl;
			}
		}

		// Inicializa a matriz de horarios com 0
		for(i=0; i<numDias; i++)
			for(j=0; j<numHoras; j++)
					m[i][j]=0;
	}
}

/*
* Imprime os horarios e seus valores
*/
void Horarios::print() {
	int i, j;

	for(i=0; i<numDias; i++){
		for(j=0; j<numHoras; j++){
			if(m[i][j]!=0){
				cout << "("<< i << "," << j <<")= "<< m[i][j] << "; ";
			}
		}
	}
	cout << "\n" << endl;
}

/*
* Pega o numeros de dias da matriz
* @return int Numero de dias
*/
int Horarios::getNumDias(){
	return numDias;
}

/*
* Pega o numeros de horas da matriz
* @return int Numero de horas
*/
int Horarios::getNumHoras(){
	return numHoras;
}

/*
* Pega o valor da matriz em um dia e hora
* @params int d Dia do valor desejado
* @params int h Hora do valor desejado
* @return int Valor correspondente a d e h
*/
int Horarios::getValor(int d, int h){
	if(d<numDias && h<numHoras)
		return m[d][h];
	return -1;
}

/*
* Seta o valor da matriz em um dia e hora
*/
void Horarios::setValor(string dia, int hora, int min, int value){
		int d= -1;
		int h= -1;

		if(dia=="SEG")
			d= SEG;
		else if(dia=="TER")
			d= TER;
		else if(dia=="QUA")
			d= QUA;
		else if(dia=="QUI")
			d= QUI;
		else if(dia=="SEX")
			d= SEX;
		else if(dia=="SAB")
			d= SAB;

		// Calcula o indice da hora
		// TODO Debugar e melhorar se a conta errar pode dar segmantation fault
		h= hora-5+min/30+(hora-6)/2;

	if(d>=0 && d<numDias && h>=0 && h<numHoras)
		m[d][h]=value;

}
